package main.java.maziacs.characters;

import main.java.maziacs.IBoard;
import main.java.maziacs.IGame;
import main.java.maziacs.counters.Counter;
import main.java.maziacs.counters.Prisoner;
import main.java.maziacs.counters.Treasure;
import main.java.maziacs.rol.Rol;
import main.java.maziacs.squares.Square;
import main.java.maziacs.squares.White;

public interface IHero extends ICharacter{
	public IBoard getBoard();
	
	public void setBoard(IBoard board);
	public void askPrisoner(Counter c);
	/**
	 * Getter of the property <tt>energy</tt>
	 * @return  Returns the energy.	 * @uml.property  name="energy"
	 */
	public abstract int getEnergy();

	/**
	 * Setter of the property <tt>energy</tt>
	 * @param energy  The energy to set.
	 * @uml.property  name="energy"
	 */
	public abstract void setEnergy(int energy);

	/** 
	 * Getter of the property <tt>sword</tt>
	 * @return  Returns the sword.
	 */
	public abstract boolean hasSword();

	/**
	 * Setter of the property <tt>sword</tt>
	 * @param sword  The sword to set.
	 * @uml.property  name="sword"
	 */
	public abstract void setSword(boolean sword);

	/** 
	 * Getter of the property <tt>treasure</tt>
	 * @return  Returns the treasure.
	 */
	public abstract boolean hasTreasure();

	/**
	 * Setter of the property <tt>treasure</tt>
	 * @param treasure  The treasure to set.
	 * @uml.property  name="treasure"
	 */
	public abstract void setTreasure(boolean treasure);

	/**
	 * Getter of the property <tt>score</tt>
	 * @return  Returns the score.
	 * @uml.property  name="score"
	 */
	public abstract int getScore();

	/**
	 * Setter of the property <tt>score</tt>
	 * @param score  The score to set.
	 * @uml.property  name="score"
	 */
	public abstract void setScore(int score);

	/**
	 */
	public abstract void explore();

	/**
	 * Getter of the property <tt>battle</tt>
	 * @return  Returns the battle.
	 * @uml.property  name="battle"
	 */
	public abstract Battle getBattle();

	/**
	 * Setter of the property <tt>battle</tt>
	 * @param battle  The battle to set.
	 * @uml.property  name="battle"
	 */
	public abstract void setBattle(Battle battle);

	/**
	 * Getter of the property <tt>game</tt>
	 * @return  Returns the game.
	 * @uml.property  name="game"
	 */
	public abstract IGame getGame();

	/**
	 * Setter of the property <tt>game</tt>
	 * @param game  The game to set.
	 * @uml.property  name="game"
	 */
	public abstract void setGame(IGame game);

	/**
	 * Getter of the property <tt>rol</tt>
	 * @return  Returns the rol.
	 * @uml.property  name="rol"
	 */
	public abstract Rol getRol();

	/**
	 * Setter of the property <tt>rol</tt>
	 * @param rol  The rol to set.
	 * @uml.property  name="rol"
	 */
	public abstract void setRol(Rol rol);

	/**
	 * Getter of the property <tt>numberGems</tt>
	 * @return  Returns the numberGems.
	 * @uml.property  name="numberGems"
	 */
	public abstract int getNumberGems();

	/**
	 * Setter of the property <tt>numberGems</tt>
	 * @param numberGems  The numberGems to set.
	 * @uml.property  name="numberGems"
	 */
	public abstract void setNumberGems(int numberGems);

	/**
	 */
	public abstract void takeGem(White w);

	/**
	 */
	public abstract void putGem();

	public void setLastPosition(Position lastPosition);

	public Position getLastPosition();
	

	public void setLastPrisoner(Prisoner lastPrisoner);

	public Prisoner getLastPrisoner();

	public void setSquarePath(Square squarePath);
	
	public Square getSquarePath();
	
	public void setTTreasure(Treasure tTreasure);

	public Treasure getTTreasure();
	
	public void setPrisoners(Integer prisoners);

	public Integer getPrisoners();
	
	public void setGems(Integer gems);
	
	public Integer getGems();
}